home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Magazine / GraphicsCards / StormMesa / src / bitmap.s < prev    next >
Text File  |  1999-02-04  |  13KB  |  730 lines

  1.  
  2. ; Storm C Compiler
  3. ; Work2:Mesa3/Mesa-3.0/src/bitmap.c
  4.     mc68030
  5.     mc68881
  6.     XREF    _gl_flush_pb
  7.     XREF    _gl_pixel_addr_in_image
  8.     XREF    _gl_feedback_vertex
  9.     XREF    _gl_update_state
  10.     XREF    _gl_error
  11.     XREF    _std__in
  12.     XREF    _std__out
  13.     XREF    _std__err
  14.     XREF    _CC
  15.  
  16.     SECTION "_render_bitmap:0",CODE
  17.  
  18.  
  19. ;static void render_bitmap( GLcontext *ctx, GLint px, GLint py,
  20. _render_bitmap
  21. L87    EQU    -$2C
  22.     link    a5,#L87
  23.     movem.l    d2-d7/a2-a4,-(a7)
  24.     move.l    $14(a5),d4
  25.     move.l    $10(a5),d7
  26.     move.l    $8(a5),a4
  27. L43
  28. ;   struct pixel_buffer *PB = ctx->PB;
  29.     move.l    a4,a0
  30.     add.l    #$E998,a0
  31.     move.l    (a0),a2
  32. ;   if (!bitmap)
  33.     tst.l    $20(a5)
  34.     bne.b    L45
  35. L44
  36.     movem.l    (a7)+,d2-d7/a2-a4
  37.     unlk    a5
  38.     rts
  39. L45
  40. ;   if (ctx->NewState) 
  41.     move.l    a4,a0
  42.     add.l    #$E960,a0
  43.     tst.l    (a0)
  44.     beq.b    L47
  45. L46
  46. ;      gl_update_state(ctx);
  47.     move.l    a4,-(a7)
  48.     jsr    _gl_update_state
  49.     addq.w    #4,a7
  50. ;      PB_INIT( PB, GL_BITMAP )
  51.     move.l    a2,a0
  52.     add.l    #$27D94,a0
  53.     clr.l    (a0)
  54. ;      PB_INIT( PB, GL_BITMAP )
  55.     move.l    a2,a0
  56.     add.l    #$27D98,a0
  57.     clr.b    (a0)
  58. ;      PB_INIT( PB, GL_BITMAP )
  59.     move.l    a2,a0
  60.     add.l    #$27D9A,a0
  61.     move.l    #$1A00,(a0)
  62. L47
  63. ;   if (ctx->Visual->RGBAflag) 
  64.     move.l    a4,a1
  65.     move.l    $8F8(a1),a0
  66.     tst.b    (a0)
  67.     beq    L55
  68. L48
  69. ;      r = (GLint) (ctx->Current.RasterColor[0] * 255.0F);
  70.     fmove.s    $2262(a4),fp0
  71.     fmul.s    #$.437F0000,fp0
  72.     fmove.l    fp0,d0
  73.     move.l    d0,d6
  74. ;      g = (GLint) (ctx->Current.RasterColor[1] * 255.0F);
  75.     lea    $2262(a4),a0
  76.     fmove.s    4(a0),fp0
  77.     fmul.s    #$.437F0000,fp0
  78.     fmove.l    fp0,d5
  79. ;      b = (GLint) (ctx->Current.RasterColor[2] * 255.0F);
  80.     lea    $2262(a4),a0
  81.     fmove.s    $8(a0),fp0
  82.     fmul.s    #$.437F0000,fp0
  83.     fmove.l    fp0,d3
  84. ;      a = (GLint) (ctx->Current.RasterColor[3] * 255.0F);
  85.     lea    $2262(a4),a0
  86.     fmove.s    $C(a0),fp0
  87.     fmul.s    #$.437F0000,fp0
  88.     fmove.l    fp0,d2
  89. ;      PB_SET_COLOR( ctx, PB,
  90.     move.l    a2,a0
  91.     add.l    #$27D80,a0
  92.     move.l    (a0),d0
  93.     cmp.l    d6,d0
  94.     bne.b    L53
  95. L49
  96.     move.l    a2,a0
  97.     add.l    #$27D80,a0
  98.     move.l    4(a0),d0
  99.     cmp.l    d5,d0
  100.     bne.b    L53
  101. L50
  102.     move.l    a2,a0
  103.     add.l    #$27D80,a0
  104.     move.l    $8(a0),d0
  105.     cmp.l    d3,d0
  106.     bne.b    L53
  107. L51
  108.     move.l    a2,a0
  109.     add.l    #$27D80,a0
  110.     move.l    $C(a0),d0
  111.     cmp.l    d2,d0
  112.     bne.b    L53
  113. L52
  114.     move.l    a2,a0
  115.     add.l    #$27D98,a0
  116.     tst.b    (a0)
  117.     bne.b    L54
  118. L53
  119. ;      PB_SET_COLOR( ctx, PB,
  120.     move.l    a4,-(a7)
  121.     jsr    _gl_flush_pb
  122.     addq.w    #4,a7
  123. L54
  124. ;      PB_SET_COLOR( ctx, PB,
  125.     move.l    a2,a0
  126.     add.l    #$27D80,a0
  127.     move.l    d6,(a0)
  128. ;      PB_SET_COLOR( ctx, PB,
  129.     move.l    a2,a0
  130.     add.l    #$27D80,a0
  131.     move.l    d5,4(a0)
  132. ;      PB_SET_COLOR( ctx, PB,
  133.     move.l    a2,a0
  134.     add.l    #$27D80,a0
  135.     move.l    d3,$8(a0)
  136. ;      PB_SET_COLOR( ctx, PB,
  137.     move.l    a2,a0
  138.     add.l    #$27D80,a0
  139.     move.l    d2,$C(a0)
  140. ;      PB_SET_COLOR( ctx, PB,
  141.     move.l    a2,a0
  142.     add.l    #$27D98,a0
  143.     move.b    #1,(a0)
  144.     bra.b    L59
  145. L55
  146. ;   PB_SET_INDEX( 
  147.     move.l    a2,a0
  148.     add.l    #$27D90,a0
  149.     move.l    (a0),d1
  150.     cmp.l    $2272(a4),d1
  151.     bne.b    L57
  152. L56
  153.     move.l    a2,a0
  154.     add.l    #$27D98,a0
  155.     tst.b    (a0)
  156.     bne.b    L58
  157. L57
  158. ;   PB_SET_INDEX( 
  159.     move.l    a4,-(a7)
  160.     jsr    _gl_flush_pb
  161.     addq.w    #4,a7
  162. L58
  163. ;   PB_SET_INDEX( 
  164.     move.l    a2,a0
  165.     add.l    #$27D90,a0
  166.     move.l    $2272(a4),(a0)
  167. ;   PB_SET_INDEX( 
  168.     move.l    a2,a0
  169.     add.l    #$27D98,a0
  170.     move.b    #1,(a0)
  171. L59
  172. ;   pz = (GLint) ( ctx->Current.RasterPos[2] * DEPTH_SCALE );
  173.     lea    $224E(a4),a0
  174.     fmove.s    $8(a0),fp0
  175.     fmul.s    #$.477FFF00,fp0
  176.     fmove.l    fp0,d5
  177. ;   for (row=0;
  178.     moveq    #0,d3
  179.     bra    L85
  180. L60
  181. ;      GLubyte *src = (GLubyte *) gl_pixel_addr_in_image( unpac
  182.     clr.l    -(a7)
  183.     move.l    d3,-(a7)
  184.     clr.l    -(a7)
  185.     pea    $1A00.w
  186.     pea    $1900.w
  187.     move.l    $18(a5),-(a7)
  188.     move.l    d4,-(a7)
  189.     move.l    $20(a5),-(a7)
  190.     move.l    $1C(a5),-(a7)
  191.     jsr    _gl_pixel_addr_in_image
  192.     add.w    #$24,a7
  193.     move.l    d0,a0
  194. ;      if (unpack->LsbFirst) 
  195.     move.l    $1C(a5),a1
  196.     tst.b    $19(a1)
  197.     beq    L73
  198. L61
  199. ;         GLubyte bitmask = 1;
  200.     moveq    #1,d2
  201. ;         for (col=0;
  202.     moveq    #0,d0
  203.     bra    L67
  204. L62
  205. ;            if (*src & bitmask) 
  206.     moveq    #0,d1
  207.     move.b    (a0),d1
  208.     moveq    #0,d6
  209.     move.b    d2,d6
  210.     and.l    d6,d1
  211.     beq.b    L64
  212. L63
  213. ;            PB_WR
  214.     move.l    $C(a5),d1
  215.     add.l    d0,d1
  216.     move.l    d1,d6
  217.     move.l    a2,a1
  218.     add.l    #$27D94,a1
  219.     move.l    (a1),d1
  220.     move.l    d6,0(a2,d1.l*4)
  221. ;            PB_WR
  222.     move.l    d7,d1
  223.     add.l    d3,d1
  224.     move.l    d1,d6
  225.     move.l    a2,a3
  226.     add.l    #$27D94,a3
  227.     lea    $4B00(a2),a1
  228.     move.l    (a3),d1
  229.     move.l    d6,0(a1,d1.l*4)
  230. ;            PB_WR
  231.     move.l    a2,a1
  232.     add.l    #$9600,a1
  233.     move.l    a2,a3
  234.     add.l    #$27D94,a3
  235.     move.l    (a3),d1
  236.     move.w    d5,0(a1,d1.l*2)
  237. ;            PB_WR
  238.     move.l    a2,a1
  239.     add.l    #$27D94,a1
  240.     move.l    (a1),d1
  241.     addq.l    #1,d1
  242.     move.l    a2,a1
  243.     add.l    #$27D94,a1
  244.     move.l    d1,(a1)
  245. L64
  246. ;            bitmask = bitmask << 1;
  247.     moveq    #0,d1
  248.     move.b    d2,d1
  249.     moveq    #1,d2
  250.     asl.l    d2,d1
  251.     move.b    d1,d2
  252. ;            if (bitmask==0) 
  253.     bne.b    L66
  254. L65
  255. ;               src++;
  256.     addq.w    #1,a0
  257. ;               bitmask = 1;
  258.     moveq    #1,d2
  259. L66
  260.     addq.l    #1,d0
  261. L67
  262.     cmp.l    d4,d0
  263.     blt.b    L62
  264. L68
  265. ;         PB_CHECK_FLUSH( ctx, PB )
  266.     move.l    a2,a0
  267.     add.l    #$27D94,a0
  268.     move.l    (a0),d0
  269.     cmp.l    #$C80,d0
  270.     blo    L84
  271. L69
  272. ;         PB_CHECK_FLUSH( ctx, PB )
  273.     move.l    a4,-(a7)
  274.     jsr    _gl_flush_pb
  275.     addq.w    #4,a7
  276. L70
  277. ;         if (bitmask!=1)
  278. L71
  279. ;            src++;
  280. L72
  281.     bra    L84
  282. L73
  283. ;         GLubyte bitmask = 128;
  284.     move.b    #$80,d2
  285. ;         for (col=0;
  286.     moveq    #0,d0
  287.     bra    L79
  288. L74
  289. ;            if (*src & bitmask) 
  290.     moveq    #0,d1
  291.     move.b    (a0),d1
  292.     moveq    #0,d6
  293.     move.b    d2,d6
  294.     and.l    d6,d1
  295.     beq.b    L76
  296. L75
  297. ;            PB_WR
  298.     move.l    $C(a5),d1
  299.     add.l    d0,d1
  300.     move.l    d1,d6
  301.     move.l    a2,a1
  302.     add.l    #$27D94,a1
  303.     move.l    (a1),d1
  304.     move.l    d6,0(a2,d1.l*4)
  305. ;            PB_WR
  306.     move.l    d7,d1
  307.     add.l    d3,d1
  308.     move.l    d1,d6
  309.     move.l    a2,a3
  310.     add.l    #$27D94,a3
  311.     lea    $4B00(a2),a1
  312.     move.l    (a3),d1
  313.     move.l    d6,0(a1,d1.l*4)
  314. ;            PB_WR
  315.     move.l    a2,a1
  316.     add.l    #$9600,a1
  317.     move.l    a2,a3
  318.     add.l    #$27D94,a3
  319.     move.l    (a3),d1
  320.     move.w    d5,0(a1,d1.l*2)
  321. ;            PB_WR
  322.     move.l    a2,a1
  323.     add.l    #$27D94,a1
  324.     move.l    (a1),d1
  325.     addq.l    #1,d1
  326.     move.l    a2,a1
  327.     add.l    #$27D94,a1
  328.     move.l    d1,(a1)
  329. L76
  330. ;            bitmask = bitmask >> 1;
  331.     moveq    #0,d1
  332.     move.b    d2,d1
  333.     moveq    #1,d2
  334.     asr.l    d2,d1
  335.     move.b    d1,d2
  336. ;            if (bitmask==0) 
  337.     bne.b    L78
  338. L77
  339. ;               src++;
  340.     addq.w    #1,a0
  341. ;               bitmask = 128;
  342.     move.b    #$80,d2
  343. L78
  344.     addq.l    #1,d0
  345. L79
  346.     cmp.l    d4,d0
  347.     blt.b    L74
  348. L80
  349. ;         PB_CHECK_FLUSH( ctx, PB )
  350.     move.l    a2,a0
  351.     add.l    #$27D94,a0
  352.     move.l    (a0),d0
  353.     cmp.l    #$C80,d0
  354.     blo.b    L84
  355. L81
  356. ;         PB_CHECK_FLUSH( ctx, PB )
  357.     move.l    a4,-(a7)
  358.     jsr    _gl_flush_pb
  359.     addq.w    #4,a7
  360. L82
  361. ;         if (bitmask!=128)
  362. L83
  363. ;            src++;
  364. L84
  365.     addq.l    #1,d3
  366. L85
  367.     cmp.l    $18(a5),d3
  368.     blt    L60
  369. L86
  370. ;   gl_flush_pb(ctx);
  371.     move.l    a4,-(a7)
  372.     jsr    _gl_flush_pb
  373.     addq.w    #4,a7
  374.     movem.l    (a7)+,d2-d7/a2-a4
  375.     unlk    a5
  376.     rts
  377.  
  378.     SECTION "_gl_direct_bitmap:0",CODE
  379.  
  380.     rts
  381.  
  382. ;GLboolean gl_direct_bitmap( GLcontext *ctx, 
  383.     XDEF    _gl_direct_bitmap
  384. _gl_direct_bitmap
  385.     movem.l    d2-d5/a2/a3,-(a7)
  386.     fmovem.x fp2/fp3/fp4,-(a7)
  387.     movem.l    $44(a7),d4/d5
  388.     move.l    $40(a7),a2
  389.     move.l    $5C(a7),a3
  390.     fmove.s    $50(a7),fp1
  391.     fmove.s    $58(a7),fp2
  392.     fmove.s    $54(a7),fp3
  393.     fmove.s    $4C(a7),fp4
  394. L88
  395. ;   GLint px = (GLint) ( (ctx->Current.RasterPos[0] - xorig) + 0.0
  396.     fmove.s    $224E(a2),fp0
  397.     fsub.x    fp4,fp0
  398.     fadd.s    #$.00000000,fp0
  399.     fmove.l    fp0,d3
  400. ;   GLint py = (GLint) ( (ctx->Current.RasterPos[1] - yorig) + 0.0
  401.     lea    $224E(a2),a0
  402.     fmove.s    4(a0),fp0
  403.     fsub.x    fp1,fp0
  404.     fadd.s    #$.00000000,fp0
  405.     fmove.l    fp0,d2
  406. ;   GLboolean completed = GL_FALSE;
  407.     moveq    #0,d0
  408. ;   if (ctx->Current.RasterPosValid==GL_FALSE) 
  409.     tst.b    $229A(a2)
  410.     bne.b    L90
  411. L89
  412.     moveq    #1,d0
  413.     fmovem.x (a7)+,fp2/fp3/fp4
  414.     movem.l    (a7)+,d2-d5/a2/a3
  415.     rts
  416. L90
  417. ;      color[1] = ctx->Current.RasterColor[1]
  418.     move.l    a2,a0
  419.     add.l    #$E964,a0
  420.     move.l    (a0),d1
  421.     cmp.l    #$1C00,d1
  422.     beq.b    L92
  423. L91
  424.     moveq    #0,d0
  425.     fmovem.x (a7)+,fp2/fp3/fp4
  426.     movem.l    (a7)+,d2-d5/a2/a3
  427.     rts
  428. L92
  429. ;   if (ctx->Driver.Bitmap) 
  430.     tst.l    $9B0(a2)
  431.     beq.b    L94
  432. L93
  433. ;      completed = (*ctx->Driver.Bitmap)( ctx, px, py, width, h
  434.     move.l    a3,-(a7)
  435.     move.l    a2,a0
  436.     add.l    #$E65E,a0
  437.     pea    (a0)
  438.     move.l    d5,-(a7)
  439.     move.l    d4,-(a7)
  440.     move.l    d2,-(a7)
  441.     move.l    d3,-(a7)
  442.     move.l    a2,-(a7)
  443.     move.l    $9B0(a2),a0
  444.     jsr    (a0)
  445.     add.w    #$1C,a7
  446. L94
  447. ;   if (!completed) 
  448.     tst.b    d0
  449.     bne.b    L96
  450. L95
  451. ;      render_bitmap( ctx, px, py, width, height, &ctx->Unpack,
  452.     move.l    a3,-(a7)
  453.     move.l    a2,a0
  454.     add.l    #$E65E,a0
  455.     pea    (a0)
  456.     move.l    d5,-(a7)
  457.     move.l    d4,-(a7)
  458.     move.l    d2,-(a7)
  459.     move.l    d3,-(a7)
  460.     move.l    a2,-(a7)
  461.     jsr    _render_bitmap
  462.     add.w    #$1C,a7
  463. L96
  464. ;   ctx->Current.RasterPos[0] += xmove;
  465.     lea    $224E(a2),a0
  466.     fmove.s    (a0),fp0
  467.     fadd.x    fp3,fp0
  468.     fmove.s    fp0,(a0)
  469. ;   ctx->Current.RasterPos[1] += ymove;
  470.     lea    $224E(a2),a0
  471.     addq.w    #4,a0
  472.     fmove.s    (a0),fp0
  473.     fadd.x    fp2,fp0
  474.     fmove.s    fp0,(a0)
  475.     moveq    #1,d0
  476.     fmovem.x (a7)+,fp2/fp3/fp4
  477.     movem.l    (a7)+,d2-d5/a2/a3
  478.     rts
  479.  
  480.     SECTION "_NoUnpack:1",DATA
  481.  
  482. _NoUnpack
  483.     dc.l    1,0,0,0,0,0
  484.     dc.b    0,0
  485.  
  486.     SECTION "_gl_Bitmap:0",CODE
  487.  
  488.  
  489. ;void gl_Bitmap( GLcontext* ctx,
  490.     XDEF    _gl_Bitmap
  491. _gl_Bitmap
  492. L121    EQU    -$24
  493.     link    a5,#L121
  494.     movem.l    d2-d5/a2/a3,-(a7)
  495.     fmovem.x fp2/fp3/fp4,-(a7)
  496.     move.l    $10(a5),d4
  497.     move.l    $C(a5),d5
  498.     move.l    $8(a5),a2
  499.     move.l    $24(a5),a3
  500.     fmove.s    $18(a5),fp1
  501.     fmove.s    $20(a5),fp2
  502.     fmove.s    $1C(a5),fp3
  503.     fmove.s    $14(a5),fp4
  504. L99
  505. ;   if (width<0 || height<0) 
  506.     tst.l    d5
  507.     bmi.b    L101
  508. L100
  509.     tst.l    d4
  510.     bpl.b    L102
  511. L101
  512. ;      gl_error( ctx, GL_INVALID_VALUE, "glBitmap" );
  513.     move.l    #L98,-(a7)
  514.     pea    $501.w
  515.     move.l    a2,-(a7)
  516.     jsr    _gl_error
  517.     add.w    #$C,a7
  518.     fmovem.x (a7)+,fp2/fp3/fp4
  519.     movem.l    (a7)+,d2-d5/a2/a3
  520.     unlk    a5
  521.     rts
  522. L102
  523. ;   if (INSIDE_BEGIN_END(ctx)) 
  524.     move.l    a2,a0
  525.     add.l    #$E968,a0
  526.     move.l    (a0),d0
  527.     cmp.l    #$1A00,d0
  528.     beq.b    L104
  529. L103
  530. ;      gl_error( ctx, GL_INVALID_OPERATION, "glBitmap" );
  531.     move.l    #L98,-(a7)
  532.     pea    $502.w
  533.     move.l    a2,-(a7)
  534.     jsr    _gl_error
  535.     add.w    #$C,a7
  536.     fmovem.x (a7)+,fp2/fp3/fp4
  537.     movem.l    (a7)+,d2-d5/a2/a3
  538.     unlk    a5
  539.     rts
  540. L104
  541. ;   if (ctx->Current.RasterPosValid==GL_FALSE) 
  542.     tst.b    $229A(a2)
  543.     bne.b    L106
  544. L105
  545.     fmovem.x (a7)+,fp2/fp3/fp4
  546.     movem.l    (a7)+,d2-d5/a2/a3
  547.     unlk    a5
  548.     rts
  549. L106
  550. ;   if (ctx->RenderMode==GL_RENDER) 
  551.     move.l    a2,a0
  552.     add.l    #$E964,a0
  553.     move.l    (a0),d0
  554.     cmp.l    #$1C00,d0
  555.     bne    L112
  556. L107
  557. ;      GLint px = (GLint) ( (ctx->Current.RasterPos[0] - xorig)
  558.     fmove.s    $224E(a2),fp0
  559.     fsub.x    fp4,fp0
  560.     fadd.s    #$.00000000,fp0
  561.     fmove.l    fp0,d3
  562. ;      GLint py = (GLint) ( (ctx->Current.RasterPos[1] - yorig)
  563.     lea    $224E(a2),a0
  564.     fmove.s    4(a0),fp0
  565.     fsub.x    fp1,fp0
  566.     fadd.s    #$.00000000,fp0
  567.     fmove.l    fp0,d2
  568. ;      GLboolean completed = GL_FALSE;
  569.     moveq    #0,d0
  570. ;      if (ctx->Driver.Bitmap) 
  571.     tst.l    $9B0(a2)
  572.     beq.b    L109
  573. L108
  574. ;         completed = (*ctx->Driver.Bitmap)( ctx, px, py, wi
  575.     move.l    a3,a1
  576.     move.l    $18(a1),-(a7)
  577.     pea    _NoUnpack(a6)
  578.     move.l    d4,-(a7)
  579.     move.l    d5,-(a7)
  580.     move.l    d2,-(a7)
  581.     move.l    d3,-(a7)
  582.     move.l    a2,-(a7)
  583.     move.l    $9B0(a2),a0
  584.     jsr    (a0)
  585.     add.w    #$1C,a7
  586. L109
  587. ;      if (!completed) 
  588.     tst.b    d0
  589.     bne.b    L111
  590. L110
  591. ;         render_bitmap( ctx, px, py, width, height, &NoUnpa
  592.     move.l    a3,a1
  593.     move.l    $18(a1),-(a7)
  594.     pea    _NoUnpack(a6)
  595.     move.l    d4,-(a7)
  596.     move.l    d5,-(a7)
  597.     move.l    d2,-(a7)
  598.     move.l    d3,-(a7)
  599.     move.l    a2,-(a7)
  600.     jsr    _render_bitmap
  601.     add.w    #$1C,a7
  602. L111
  603.     bra    L120
  604. L112
  605. ;   else if (ctx->RenderMode==GL_FEEDBACK) 
  606.     move.l    a2,a0
  607.     add.l    #$E964,a0
  608.     move.l    (a0),d0
  609.     cmp.l    #$1C01,d0
  610.     bne    L119
  611. L113
  612. ;      color[0] = ctx->Current.RasterColor[0];
  613.     move.l    $2262(a2),-$10(a5)
  614. ;      color[1] = ctx->Current.RasterColor[1];
  615.     lea    $2262(a2),a0
  616.     fmove.s    4(a0),fp0
  617.     lea    -$10(a5),a0
  618.     fmove.s    fp0,4(a0)
  619. ;      color[2] = ctx->Current.RasterColor[2];
  620.     lea    $2262(a2),a0
  621.     fmove.s    $8(a0),fp0
  622.     lea    -$10(a5),a0
  623.     fmove.s    fp0,$8(a0)
  624. ;      color[3] = ctx->Current.RasterColor[3];
  625.     lea    $2262(a2),a0
  626.     fmove.s    $C(a0),fp0
  627.     lea    -$10(a5),a0
  628.     fmove.s    fp0,$C(a0)
  629. ;      if (ctx->Current.TexCoord[3] == 0.0)
  630.     move.l    $222A(a2),a0
  631.     fmove.s    $C(a0),fp0
  632.     ftst.d    fp0
  633.     fbne.b    L115
  634. L114
  635. ;         invq = 1.0F;
  636.     fmove.s    #$.3F800000,fp0
  637.     bra.b    L116
  638. L115
  639. ;         invq = 1.0F / ctx->Current.RasterTexCoord[3];
  640.     move.l    $2276(a2),a0
  641.     fmove.s    #$.3F800000,fp0
  642.     fdiv.s    $C(a0),fp0
  643. L116
  644. ;      texcoord[0] = ctx->Current.RasterTexCoord[0] * invq;
  645.     move.l    $2276(a2),a0
  646.     fmove.s    (a0),fp1
  647.     fmul.x    fp0,fp1
  648.     fmove.s    fp1,-$20(a5)
  649. ;      texcoord[1] = ctx->Current.RasterTexCoord[1] * invq;
  650.     move.l    $2276(a2),a0
  651.     fmove.s    4(a0),fp1
  652.     fmul.x    fp0,fp1
  653.     lea    -$20(a5),a0
  654.     fmove.s    fp1,4(a0)
  655. ;      texcoord[2] = ctx->Current.RasterTexCoord[2] * invq;
  656.     move.l    $2276(a2),a0
  657.     fmove.s    $8(a0),fp1
  658.     fmul.x    fp0,fp1
  659.     lea    -$20(a5),a0
  660.     fmove.s    fp1,$8(a0)
  661. ;      texcoord[3] = ctx->Current.RasterTexCoord[3];
  662.     move.l    $2276(a2),a0
  663.     fmove.s    $C(a0),fp0
  664.     lea    -$20(a5),a0
  665.     fmove.s    fp0,$C(a0)
  666. ;BACK_TOKEN( ctx, 
  667.     move.l    a2,a0
  668.     add.l    #$E828,a0
  669.     move.l    $10(a0),d1
  670.     move.l    a2,a0
  671.     add.l    #$E828,a0
  672.     cmp.l    $C(a0),d1
  673.     bhs.b    L118
  674. L117
  675. ;BACK_TOKEN( ctx, 
  676.     move.l    a2,a0
  677.     add.l    #$E828,a0
  678.     move.l    $8(a0),a1
  679.     move.l    a2,a0
  680.     add.l    #$E828,a0
  681.     move.l    $10(a0),d0
  682.     move.l    #$44E08000,0(a1,d0.l*4)
  683. L118
  684. ;BACK_TOKEN( ctx, 
  685.     move.l    a2,a0
  686.     add.l    #$E838,a0
  687.     move.l    (a0),d0
  688.     addq.l    #1,d0
  689.     move.l    a2,a0
  690.     add.l    #$E838,a0
  691.     move.l    d0,(a0)
  692. ;      gl_feedback_vertex( ctx,
  693.     pea    -$20(a5)
  694.     fmove.l    $2272(a2),fp0
  695.     fmove.s    fp0,-(a7)
  696.     pea    -$10(a5)
  697.     lea    $224E(a2),a0
  698.     move.l    $C(a0),-(a7)
  699.     lea    $224E(a2),a0
  700.     move.l    $8(a0),-(a7)
  701.     lea    $224E(a2),a0
  702.     move.l    4(a0),-(a7)
  703.     move.l    $224E(a2),-(a7)
  704.     move.l    a2,-(a7)
  705.     jsr    _gl_feedback_vertex
  706.     add.w    #$20,a7
  707. L119
  708. ;   else if (ctx->RenderMode==GL_SELECT) 
  709. L120
  710. ;   ctx->Current.RasterPos[0] += xmove;
  711.     lea    $224E(a2),a0
  712.     fmove.s    (a0),fp0
  713.     fadd.x    fp3,fp0
  714.     fmove.s    fp0,(a0)
  715. ;   ctx->Current.RasterPos[1] += ymove;
  716.     lea    $224E(a2),a0
  717.     addq.w    #4,a0
  718.     fmove.s    (a0),fp0
  719.     fadd.x    fp2,fp0
  720.     fmove.s    fp0,(a0)
  721.     fmovem.x (a7)+,fp2/fp3/fp4
  722.     movem.l    (a7)+,d2-d5/a2/a3
  723.     unlk    a5
  724.     rts
  725.  
  726. L98
  727.     dc.b    'glBitmap',0
  728.  
  729.     END
  730.